const mysql1 = require('../db/index')
// 导入加密模块
const bcrypt = require('bcrypt')
// 定义一个循环的幂值
const saltRounds = 10
const showRegiterPage = function(req, res) {
    res.render('./user/login.ejs', {})
}
const showLoginPage = function(req, res) {
    // 当调用模板引擎res.render函数时，./  代表这app.set('views', __dirname+'/views')指定的目录
    res.render('./user/register.ejs', {})
}
const showLogin = function(req, res) {
    // const body = req.body
    // let sql1 = 'select * from login1 where username=? and password=?'
    // mysql1.conn.query(sql1, [body.username], (err, result) => {
    //     if (err) return res.send({ msg: '无效账户', status: 502 })
    //     if (result.length !== 1) return res.send({ msg: '用户名错误', status: 501 })
    //         // 把用户登录成功之后的用户信息，挂在到session上
    //     req.session.user = result[0]
    //     console.log('result', result)
    //         // 把用户登录成功之后的结果，挂在到session上
    //     req.session.isLogin = true
    //     res.send({ msg: '登录成功', status: 200 })
    // })
    const body = req.body
    let sql1 = 'select * from login1 where username=?'
    mysql1.conn.query(sql1, [body.username], (err, result) => {
        if (err) return res.send({ msg: '无效账户', status: 502 })
        if (result.length !== 1) return res.send({ msg: '用户名错误', status: 501 })
        // 对比密码的方法（解密）
        // bcrypt.compare('用户输入的密码'， 数据库中存在的密码， 回调函数)
        bcrypt.compare(body.password, result[0].password, (err, pwd1) => {
            if (err) return res.send({msg:'登录失败',status:507})
            if (!pwd1) return res.send({msg:'登录失败',status:508})
                // 把用户登录成功之后的用户信息，挂在到session上
            req.session.user = result[0]
            console.log('result', result)
                // 把用户登录成功之后的结果，挂在到session上
            req.session.isLogin = true
            res.send({ msg: '登录成功', status: 200 })
        })

        
    })
}
const showregiter = (req, res) => {
        const body = req.body
        if (body.username.trim().length <= 0 || body.password.trim().length <= 0 || body.nicktime.trim().length <= 0) {
            return res.send({ msg: '表单填写不完整', status: 501 })
        }
        // 查询用户是否重复
        const sql1 = 'select count(*) as count from login1 where username=?'
            // console.log(mysql)
        mysql1.conn.query(sql1, body.username, (err, result) => {
            if (err) return res.send({ msg: '用户名查重失败', status: 502 })
            if (result[0].count !== 0) return res.send({ msg: '用户已经注册过请重新注册', status: 503 })
            body.ctime = mysql1.moment().format('YYYY-MM-DD HH:mm:ss')
            // 调用加密方法
            // 在执行sql语句之前，先对用户提供的密码进行加密 防止密码明文泄露出去，被清空
            // bcrypt.hash('要被加密的密码'，循环的幂次，回调函数)
            bcrypt.hash(body.password, saltRounds,(err1,pwd)=> {
                if (err1) return res.send({msg:'注册用户失败', status:506})
                // 把加密之后的新密码赋值给body.password
                body.password = pwd
                const sql2 = 'insert into login1 set ?'
                console.log(body)
                mysql1.conn.query(sql2, body, (err, result) => {
                if (err === 'null') return res.send({ msg: '注册新用户失败', status: 504 })
                if (result.affectedRows !== 1) return res.send({ msg: '注册新用户失败', status: 505 })
                return res.send({ msg: '新用户注册成功', status: 200 })
            })
            })
            
        })
    }
    // 注销
const showLogout = (req, res) => {
    req.session.destroy(() => {
        // 使用res.redirect方法，可以让客户端重新访问指定的页面
        res.redirect('/')
    })
}

module.exports = {
    showregiter,
    showLogin,
    showLoginPage,
    showRegiterPage,
    showLogout
}